package org.example.springmvc1;

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.Arrays;
import java.util.List;

/**
 * 传递一些特殊参数
 */
@RestController
@RequestMapping("/print")
public class Spring2 {

    //传递多个参数
    //多个参数直接在方法的参数里面写就好
    @RequestMapping("/1")
    public String print1(String name,int age,String gender){
        return "接收到了 name " + name + "\n\tage:" + age + "\n\tgender:" + gender;
    }

    //传递对象
    //也是直接传递就行
    @RequestMapping("/2")
    public String print2(User user){
        return user.toString();
    }

    //后端参数重命名
    //使用 @RequestParam 注解,前端只能传递修改之前的名字,后端只能获取到修改之后的名字
    @RequestMapping("/3")
    public String print3(@RequestParam("name") String userName){
        return userName;
    }
    //这里注解里面有几个参数需要注意
    //这个require默认值是 true ,说明这个注解中的参数必须要传,设置为 false 之后不需要必传
    @RequestMapping("/31")
    public String print31(@RequestParam(value = "name",required = false)String userName){
        return userName;
    }

    //传递数组
    //有两种传递方式,分别用多个 arr 传递或者多个参数内容之间用逗号隔开
    @RequestMapping("/4")
    public String print4(String[] arr){
        return Arrays.toString(arr);
    }

    //传递 Json 字符串
    @RequestMapping("/5")
    public String print5(@RequestBody User user){
        return user.toString();
    }

    //获取 url 中的参数
    //这个获取的 url 中的参数不是在?后面的
    @RequestMapping("/6/{age}/{name}")
    public String print6(@PathVariable Integer age,@PathVariable("name") String userName){
        return "age: " + age + "\n\tuserName: " + userName;
    }

    //传递集合
    @RequestMapping("/7")
    public String print7(@RequestParam List<String> list/*这个用来绑定参数关系*/ ){
        return "size: " + list.size() + "\n\tlist: " + list;
    }

    //传递文件
    @RequestMapping("/8")
    public String print8(@RequestPart MultipartFile file){
        return file.getOriginalFilename();
    }

}
